using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace MouseKeyboardOperationSimulator
{
    /// <summary>
    /// 输入验证类
    /// </summary>
    public static class InputValidator
    {

        // 操作示例字典
        private static readonly Dictionary<string, string> OperationExamples = new Dictionary<string, string>
        {
            { "移动到坐标", "示例: 100,200" },
            { "左键单击", "示例: 100,200" },
            { "左键双击", "示例: 100,200" },
            { "右键单击", "示例: 100,200" },
            { "右键双击", "示例: 100,200" },
            { "中键单击", "示例: 100,200" },
            { "鼠标滚轮", "示例: 1 (正数向上滚动，负数向下滚动，单位：1表示向上滚动一下)" },
            { "左键拖动", "示例: 100,200;500;300,400 (起始坐标;拖动时长毫秒数;结束坐标)" },
            { "单击按键", "示例: A, F1, Enter, Ctrl+A" },
            { "按下按键", "示例: Ctrl, Shift, Alt, Ctrl+A" },
            { "释放按键", "示例: Ctrl, Shift, Alt, Ctrl+A" },
            { "时长", "示例: 1000 (单位: 毫秒)" }
        };

        /// <summary>
        /// 获取操作示例字典
        /// </summary>
        public static Dictionary<string, string> GetOperationExamples()
        {
            return new Dictionary<string, string>(OperationExamples);
        }

        /// <summary>
        /// 验证操作内容是否符合格式要求
        /// </summary>
        public static bool ValidateOperationContent(string operationType, string content)
        {
            if (string.IsNullOrEmpty(content))
                return true; // 允许空内容

            switch (operationType)
            {
                case "移动到坐标":
                case "左键单击":
                case "左键双击":
                case "右键单击":
                case "右键双击":
                case "中键单击":
                    // 格式: x,y (两个数字，用逗号分隔)
                    return HelperFunctions.ValidateCoordinateFormat(content);
                    
                case "鼠标滚轮":
                    // 格式: 数字 (可以是正数或负数)
                    return HelperFunctions.ValidateIntegerFormat(content);
                    
                case "左键拖动":
                    // 格式: 起始坐标;拖动时长毫秒数;结束坐标
                    return HelperFunctions.ValidateDragOperationFormat(content);
                    
                case "单击按键":
                case "按下按键":
                case "释放按键":
                    // 格式: 按键名称或组合键 (只允许单个按键或标准组合键)
                    return HelperFunctions.ValidateKeyFormat(content);
                    
                case "时长":
                    // 格式: 正整数
                    return HelperFunctions.ValidatePositiveIntegerFormat(content);
                    
                case "开始":
                    // 格式: 正整数或空 (正整数表示循环次数，空表示无限循环)
                    return string.IsNullOrEmpty(content) || HelperFunctions.ValidatePositiveIntegerFormat(content);
                    
                case "结束":
                    // 格式: 必须为空
                    return string.IsNullOrEmpty(content);
                    
                default:
                    return true; // 对于未知类型，允许任何内容
            }
        }

    }
}